import request from '@/router/axios'

/**
 * 分页查询方法，返回JSON对象，包括total-总记录数，records-记录数
 * query js对象，其属性可以有：page-当前页，limit-每页显示条数，orderCondition-排序字段，isAsc-true为正序，_Query_String-自定义的where条件，其它自定义字段为查询条件
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TsysRoleMapper
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 * 调用举例：
 * fetchList(listQuery,mapperCls,grpName).then(response => {
 *      this.list = response.data.records;
 *      this.total = response.data.total;
 *  });
 */
export function fetchList(query,mapperCls,grpName,dbName) {
  if(dbName =='' || dbName== undefined){
	 dbName = 'undefined';
  }
  return request({
    url: '/bus/doPager/' + mapperCls + '/' + dbName,
    method: 'post',
    data: query
  })
}

/**
 * 导出数据方法
 * query js对象，其属性可以有：orderCondition-排序字段，isAsc-true为正序，_Query_String-自定义的where条件，其它自定义字段为查询条件
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TsysRoleMapper
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 * xmlCfg 导出配置信息
 */
export function exportList(query,mapperCls,grpName,xmlCfg,dbName) {
  query._Export_XmlCfg = xmlCfg;
  if(dbName =='' || dbName== undefined){
	 dbName = 'undefined';
  }
  return request({
    url: '/bus/doExport/' + mapperCls+ '/' + dbName,
    method: 'post',
    responseType: 'blob',
    data: query
  })
}

/**
 * 树状结构查询方法，返回查询结果为JSON格式
 * treeId 要查询数据的parentId，注意此方法要求表中设计的父ID字段名为parentId
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TSysDeptMapper
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 *
 */
export function fetchTree(treeId,mapperCls,grpName,dbName) {
  if(dbName =='' || dbName== undefined){
	 dbName = 'undefined';
  }
  return request({
	url: '/bus/doMapper/'+ mapperCls + '/selectSelective/' + dbName,
	method: 'post',
	data: {arg0:{parentId:treeId}}
  })
}

/**
 * 新增对象方法，成功无返回结果，失败则抛出异常
 * obj js对象，其属性对应后台要增加的PO类
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TsysRoleMapper
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 *
 */
export function addObj(obj,mapperCls,grpName,dbName) {
  if(dbName =='' || dbName== undefined){
	 dbName = 'undefined';
  }
  return request({
    url: '/bus/doUpdate/1/' + mapperCls + '/' + dbName,
    method: 'post',
    data: obj
  })
}

/**
 * 通过主键获取对象方法，返回JSON格式对象数据
 * id 主键值，如为复合主键时id是复合主键的JSON字符串，例{"id1":"123","id2":"456"}
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TsysRoleMapper
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 *
 */
export function getObj(id,mapperCls,grpName,dbName) {
  if(dbName =='' || dbName== undefined){
	  dbName = 'undefined';
  }
  return request({
    url: '/bus/doQuery/1/' + mapperCls + '/'  + encodeBase64Content(id) + '/' + dbName,
    method: 'get'
  })
}

/**
 * 通过主键删除对象方法，成功无返回结果，失败则抛出异常
 * id 主键值，如为复合主键时id是复合主键的JSON字符串，例{"id1":"123","id2":"456"}
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TsysRoleMapper
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 *
 */
export function delObj(id,mapperCls,grpName,dbName) {
  if(dbName =='' || dbName== undefined){
	dbName = 'undefined';
  }
  return request({
    url: '/bus/doQuery/2/' + mapperCls+ '/' + encodeBase64Content(id) + '/' + dbName,
    method: 'delete'
  })
}

/**
 * 修改对象方法，成功无返回结果，失败则抛出异常
 * obj js对象，其属性对应后台要修改的PO类
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TsysRoleMapper
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 *
 */
export function putObj(obj,mapperCls,grpName,dbName) {
  if(dbName =='' || dbName== undefined){
	 dbName = 'undefined';
  }
  return request({
    url: '/bus/doUpdate/2/' + mapperCls+ '/' + dbName,
    method: 'put',
    data: obj
  })
}

/**
 * 直接调用Mapper类的方法，调用方法有返回时，返回数据为JSON格式
 * obj 调用方法的入参，JSON格式，按照入参顺序KEY定义为arg0,arg1...
 * mapperCls 调用Mapper类的全路径，如data.test.dao.TsysRoleMapper
 * methodName 调用方法名
 * grpName 子系统名称，如root
 * dbName 数据源名称，可以为空使用默认数据源
 *
 */
export function doMapper(obj,mapperCls,methodName,grpName,dbName) {
  if(dbName =='' || dbName== undefined){
	 dbName = 'undefined';
  }
  return request({
    url: '/bus/doMapper/' + mapperCls + '/' + methodName + '/' + dbName,
    method: 'post',
    data: obj
  })
}

/**
 * 直接调用后台交易，调用如有返回时，返回数据为JSON格式
 * obj 调用方法的入参，JSON格式
 * appName 应用名称，如com.test
 * busCode 交易码，如T201
 * grpName 子系统名称，如root
 *
 */
export function doBusiness(obj,grpName,appName,busCode) {
  return request({
    url: '/bus/doBusiness/'+ appName + '/' + busCode,
    method: 'post',
    data: obj
  })
}

/**
 * 生成UUID字符串
 *
 */
export function uuid() {
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = "";
 
    var uuid = s.join("");
    return uuid;
}

/**
 * BASE64编码
 *
 */
function encodeBase64Content(commonContent) {
	let base64Content = Buffer.from(commonContent).toString('base64');
    return base64Content;
}